package com.grandt.controller.ventanas.internas;

import com.grandt.model.beans.jugadores.FiltroJugadores;
import com.grandt.model.beans.jugadores.Jugador;
import com.grandt.model.constants.Cotizacion;
import com.grandt.model.constants.Posicion;
import com.grandt.model.constants.TipoJugador;
import com.grandt.model.exceptions.BuscarDatosException;
import com.grandt.model.exceptions.InsertDataException;
import com.grandt.model.exceptions.JugadorExisteException;
import com.grandt.model.exceptions.JugadoresCompletoException;
import com.grandt.model.exceptions.MontoSuperadoException;
import com.grandt.model.manager.ModelGranDT;
import com.grandt.view.ventanas.internas.JInternalFrameArmarEquipo;

public class ControllerArmarEquipo {

	private ModelGranDT model;
	private JInternalFrameArmarEquipo dialog;
	public ControllerArmarEquipo(ModelGranDT model,JInternalFrameArmarEquipo dialog) {
		this.model = model;
		this.dialog = dialog;		
	}
	public void ok() {
		dialog.setVisible(false);		
	}
	public void cancel() {
		dialog.setVisible(false);
		
	}
	public void agregar() throws JugadorExisteException, MontoSuperadoException, InsertDataException, JugadoresCompletoException {
		TipoJugador tipo = model.armarEquipo(dialog.getJugador());
		dialog.agregarJugador(dialog.getJugador(),tipo);
		dialog.setPuedoGastar(model.getEquipoUsuarioLogueado().getPuedoGastar());
		dialog.setGastado(model.getEquipoUsuarioLogueado().getGastado());
	}
	public void reemplazar() throws Exception {
		Jugador jugadorActual = dialog.getJugadorActual();
		Jugador jugadorNuevo = dialog.getJugador();
		if(jugadorActual!=null && jugadorNuevo!=null){
			if(jugadorActual.getPosicion().equals(jugadorNuevo.getPosicion())){
				model.removerJugadorEnEquipo(jugadorActual);
				model.agregarJugadorEnEquipo(jugadorNuevo);
				initComponentViewParcial();
			}else{
				throw new Exception("Para reemplazar se debe seleccionar la misma posicion");
			}
		}else{
			throw new Exception("Debe seleccionar un jugador para reemplazar");
		}
		
	}
	public void borrar() throws Exception {
		Jugador jugadorActual = dialog.getJugadorActual();
		if(jugadorActual!=null){
			model.removerJugadorEnEquipo(jugadorActual);
			initComponentViewParcial();
		}else{
			throw new Exception("Debe seleccionar un jugador para poder borrar");
		}
	}

	public void buscar() throws BuscarDatosException {
		FiltroJugadores filtro = new FiltroJugadores();
		filtro.setClub(dialog.getClubName());
		filtro.setMinimo(dialog.getCotizacionMinima());
		filtro.setMaximo(dialog.getCotizacionMaxima());
		filtro.setPosicion(dialog.getPosicion());
		dialog.initJugadores(model.getJugadores(filtro));		

	}
	/**
	 * Carga todos los jugadores en la tablas
	 * asi como tambien los combos para realizar el filtro
	 * @throws BuscarDatosException 
	 */
	public void initComponentView() throws BuscarDatosException {
		
		dialog.initClubes(model.getClubesDisponibles());
		dialog.initCotizaciones(Cotizacion.values());
		dialog.initPuestos(Posicion.values());
		dialog.resetTableTitulares();
		dialog.resetTableSuplentes();
		dialog.initJugadores(model.getJugadores(null));		
		dialog.initEquipo(model.getEquipoUsuarioLogueado());
		dialog.puedoGastar(model.getEquipoUsuarioLogueado().getPuedoGastar());
		dialog.gastado(model.getEquipoUsuarioLogueado().getGastado());
		dialog.setTitle(model.getEquipoUsuarioLogueado().getNombre());
	}
	private void initComponentViewParcial() {
		dialog.resetTableTitulares();
		dialog.resetTableSuplentes();
		dialog.initEquipo(model.getEquipoUsuarioLogueado());
		dialog.puedoGastar(model.getEquipoUsuarioLogueado().getPuedoGastar());
		dialog.gastado(model.getEquipoUsuarioLogueado().getGastado());
	}

	
}
